using System.Collections.Generic;

namespace GGEditor.Core.Plugins
{
	public interface IPluginDependencyTree
	{
		bool IsValid { get; }
		IEnumerable<IPluginDependencyNode> NodeLoadingOrder { get; }
		IEnumerable<string> FileLoadingOrder { get; }
	}

	public interface IPluginDependencyTreeBuilder : IPluginDependencyTree
	{
		void Insert(string pluginPath, string filePath);
	}

	public interface IPluginDependencyNode
	{
		string PluginPath { get; }
		string FilePath { get; }
		IEnumerable<IPluginDependencyNode> Children { get; }
	}

	public interface IPluginDependencyNodeBuilder : IPluginDependencyNode
	{
		new string PluginPath { get; set; }
		new string FilePath { get; set; }
		void Insert(IPluginDependencyNode child);
	}
}